// 暴力解法
int minSubArrayLen(int target, int* nums, int numsSize) {
    int length = numsSize + 1; // 记录当前符合要求长度
    // 两层循环遍历各种起点和终点的组合
    for (int i = 0; i < numsSize; i++) {
        for (int j = i; j < numsSize; j++) {
            // 如果该组合内的元素和大于target，记录长度
            int sum = 0;
            // 求和该组合的元素
            for (int k = i; k <= j; k++) {
                sum += nums[k];
            }
            // 条件判断赋值length
            if (sum >= target) {
                length = ((j - i + 1) < length) ? (j-i+1) : length;
            }
        }
    }
    if (length == numsSize + 1) return 0;
    else return length;
}

// 滑动窗口
int minSubArrayLen(int target, int* nums, int numsSize) {
    // 先初始化左指针和右指针到原点处
    int left = 0;
    int sum = 0; // 元素和
    int length = numsSize + 1; // 记录长度
    // 右指针拉抻窗口，元素和大于等于target时记录长度且左指针开始收缩窗口。
    // 循环结束条件：当右指针遍历完数组时结束
    for (int right = 0; right < numsSize; right++) {
        sum += nums[right];
        // 元素和小于target时拉伸窗口，右指针移动
        // 元素和大于等于target时，记录长度、收缩窗口、再重复直到小于target
        while (sum >= target) {
            length = (right - left + 1) < length ? (right - left + 1) : length;
            sum -= nums[left++];
        }
 
    }
    return (length == numsSize + 1) ? 0 : length;
}